package hl.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import hl.dao.BaseDao;
import hl.model.TEquip;
import hl.model.TPlace;
import hl.pageModel.DataGrid;
import hl.pageModel.Equip;
import hl.service.EquipService;

@Service("equipService")
public class EquipServiceImpl implements EquipService {

	private BaseDao<TEquip> equipDao;

	public BaseDao<TEquip> getEquipDao() {
		return equipDao;
	}

	private BaseDao<TPlace> placeDao;

	public BaseDao<TPlace> getplaceDao() {
		return placeDao;
	}
	@Autowired
	public void setplaceDao(BaseDao<TPlace> placeDao) {
		this.placeDao = placeDao;
	}
	@Autowired
	public void setEquipDao(BaseDao<TEquip> equipDao) {
		this.equipDao = equipDao;
	}

	
	@Override
	public DataGrid getDatagrid(Equip equip) {
		DataGrid dg = new DataGrid();
		String hql = "from TEquip t ";

		Map<String, Object> params = new HashMap<String, Object>();

		//hql = search(equip, hql, params);

		if (equip.getOrder() != null) {
			hql += " order by " + equip.getSort() + " " + equip.getOrder();
		}

		List<TEquip> l = equipDao.find(hql, params, equip.getPage(), equip.getRows());

		int totalHql = equipDao.count(hql, params);

		List<Equip> pl = new ArrayList();
		if (l != null && l.size() > 0) {
			for (TEquip t : l) {
				Equip u = new Equip();
				BeanUtils.copyProperties(t, u);
				u.setPkPlace(t.getTPlace().getPkPlace());
				u.setPlaceName(t.getTPlace().getName());
				pl.add(u);
			}
		}
		dg.setRows(pl);
		dg.setTotal(totalHql);
		return dg;
	}

	private String search(Equip equip, String hql, Map<String, Object> params) {
		/*if (equip.getName() != null && !equip.getName().trim().equals("")) {
			hql += " where t.name like :value1 ";
			params.put("value1", "%" + equip.getName().trim() + "%");
		}

		if (equip.getGender() != null && !equip.getGender().equals("")) {
			if (hql.contains("where"))
				hql += " and ";
			else
				hql += " where ";
			hql += " t.gender like :value2 ";
			params.put("value2", "%" + equip.getGender().trim() + "%");
		}
		if (equip.getPkequip() != null && !equip.getPkequip().equals("")) {
			if (hql.contains("where"))
				hql += " and ";
			else
				hql += " where ";
			hql += " t.pkequip like :value3 ";
			params.put("value3", "%" + equip.getPkequip().toString() + "%");
		}*/
		return hql;
	}

	@Override
	public void save(Equip equip) {
		TEquip t = new TEquip();
		BeanUtils.copyProperties(equip, t);
		t.setCdatetime(new Date());
		t.setTPlace(placeDao.get(TPlace.class, equip.getPkPlace()));
		equipDao.save(t);
	}

	@Override
	public void edit(Equip equip) {
		TEquip t = new TEquip();
		BeanUtils.copyProperties(equip, t);
		t.setMdatetime(new Date());
		t.setTPlace(placeDao.get(TPlace.class, equip.getPkPlace()));
		equipDao.saveOrUpdate(t);
	}

	@Override
	public void remove(Equip equip) {
		TEquip t = equipDao.get(TEquip.class, equip.getPkEquip());
		equipDao.delete(t);
	}

	@Override
	public Object getComboBox(Equip equip) {
		List<TEquip> l = equipDao.find("from TEquip");
		List<Equip> pl = new ArrayList();
		if (l != null && l.size() > 0) {
			for (TEquip t : l) {
				Equip u = new Equip();
				BeanUtils.copyProperties(t, u);
				pl.add(u);
			}
		}
		return pl;
	}

}
